package com.rgs.se.concurrent.thread;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * @author Ren Gaoshuai
 * @ClassName NewThread01
 * @Description 顺序编程  不使用并发
 * @date 2021-09-17 10:36
 **/
public class NewThread01 {


    public static void main(String[] args) throws InterruptedException {
        System.out.println("----------顺序编程------------");
        eat();
        drink();
        System.out.println("----------并发编程------------");
        new ConcurrentEat().start();
        new ConcurrentDrink().start();
    }

    /**
     *  循序执行程序（对应现实中）
     *  先吃饭
     *  在喝酒
     *
     *  不能同步进行
     */
    public static void eat() throws InterruptedException {
        System.out.println("开始吃饭?...\t" + getFormatDateTime());
        Thread.sleep(2000);
        System.out.println("吃饭结束?...\t" + getFormatDateTime());
    }

    public static void drink() throws InterruptedException {
        System.out.println("开始喝酒?...\t" + getFormatDateTime());
        Thread.sleep(2000);
        System.out.println("喝酒结束?...\t" + getFormatDateTime());
    }

    /**
     * 1.怎么创建线程
     *      继承Thread的类，实现run方法
     *      run方法里面定义牛的业务逻辑
     * 2.怎么运行线程？
     *      new 自己定义的线程类
     *      调用start()方法
     *
     *  一边吃饭，一边喝酒，执行速度快
     *
     */
    //继承Thread类，并实现run方法就是启动一个线程
    static class ConcurrentEat extends Thread{
        @Override
        public void run() {
            //写具体的业务逻辑
            System.out.println("开始吃饭?...\t" + getFormatDateTime());
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("结束吃饭?...\t" + getFormatDateTime());

        }
    }

    static class ConcurrentDrink extends Thread{
        @Override
        public void run() {
            //写具体的业务逻辑
            System.out.println("开始喝酒?...\t" + getFormatDateTime());
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("结束喝酒?...\t" + getFormatDateTime());

        }
    }

    public static String getFormatDateTime(){
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        return dtf.format(LocalDateTime.now());
    }
}
